package CodeProcess;

/**
 * 试件形式处理器
 *
 * @author zzy
 * @version V1.0
 * @since 2022/8/2
 */
public class SpecimenProcess extends ProjectCodeProcess {

    public String process(String[] args) {
        StringBuilder sb = new StringBuilder();

        // 板
        final String _P = "P";

        // 管
        final String _T = "T";

        // 管-板
        final String P_T = "P-T";

        // 板-管 数据参数
        Float[] parametersP_T;

        // 管-管
        final String T_T = "T-T";

        // 管-管 数据参数
        Integer[] parametersT_T;

        // 3.2.1 数据校验 already processed
        String specimen = args[1];
        String gap = args[2];
        if (!specimen.equals(_P) && !specimen.equals(_T) && !specimen.equals(P_T) && !specimen.equals(T_T)) {
            throw new IllegalArgumentException("试件参数异常！");
        }

        // 获取外径 D
        float diameter = 0F;

        // 焊接位置下标
        int index = 0;

        // 是否为套管
        boolean flagT_D_T = false;

        // diameter 解析器
        for (int i = 0; i < args.length; i++) {
            if (args[i].contains("D") && !args[i].equals("PD")) {
                index = i + 1;

                flagT_D_T = ProjectCodeProcess.isDrivepipe(args[i]);

                try {
                    //TODO T-T接管 ？ 取主管还是支管的值呢？
                    if (T_T.equals(specimen)) {
//                    parametersT_T = ProjectCodeProcess.pipeLineT_THandler(args[i]);

                    }

                    // P-T接管  -> t6D200
                    else if (P_T.equals(specimen) && !"FW".equals(gap)) {
                        parametersP_T = ProjectCodeProcess.pipeLineP_THandler(args[i]);
                        diameter = parametersP_T[1];
                    }

                    // P-T & FW -> T6D200
                    else if (P_T.equals(specimen)) {
                        parametersP_T = ProjectCodeProcess.pipeLineP_T_FWHandler(args[i]);
                        diameter = parametersP_T[1];
                    }

                    // 处理套管 -> T3D30T5
                    else if (flagT_D_T) {
                        Float[] parametersT_D_T = ProjectCodeProcess.pipeLineT_D_THandler(args[i]);
                        diameter = parametersT_D_T[1];
                    }

                    // 没有主管和支管, 直接取D的参数不需要切割
                    else {
                        diameter = Float.parseFloat(args[i].substring(1));
                        break;
                    }

                } catch (Exception e) {
                    throw new IllegalArgumentException("获取试件直径参数异常！");
                }

            }
        }

        // 单独处理套管的
        if (flagT_D_T && _T.equals(specimen)) {
            sb.append("（套管）");
            return sb.toString();
        }

        // 3.2.2 外径 D 大于或等于 25mm 管的技能评定结果适用于板
        if (diameter >= 25F) {
            if (specimen.equals(P_T)) {
                sb.append(" ").append("板-板");
            }
            if (specimen.equals(_T)) {
                sb.append("或板");
            }
        }

        if (specimen.equals(_P)) {
            // 3.2.4 板试件在平焊（PA）、平角焊（PB）或横焊（PC）位置评定合格，其技能评定结果适用于焊接位置适用范围内管外径大于或等于150mm的管。
            index = index == 0 ? 5 : index;
            if (args[index].equals("PA") || args[index].equals("PB") || args[index].equals("PC")) {
                sb.append("或管（外径D≥150mm）");
            }

            // 3.2.3 板技能评定结果适用于外径 D 大于或等于 500mm 的管
            else {
                sb.append("或管：管外径D≥500mm");
            }
        }

        /*
         3.2.5 产品中的管-板接管、管-管接管接头需采用相应的管-板、管-管试件进行评定。
          */
        // (1) 管-管接管技能评定适用于管-板接管技能评定，反之不可，3.2.5（3）除外
        if (specimen.equals(T_T)) {
            sb.append("接管" + "\t" + "管-板接管");
        }

        // (2) 主管外径（D1）与支管外径（D2）比值（D1/D2）评定的适用范围为大于或等于评定试件主管与支管的比值
        // (影响管外径因素)

        // (3) 产品中主管外径大于或等于500mm，且 D1/D2大于5时，技能评定管-管接管时的主管可以用板代替
        if (specimen.equals(P_T)) {
            sb.append(" ").append("管-管（主管外径≥500mm，且D1/D2＞5）");
        }

        // (4) 支管角度（主管轴线或板平面与支管轴线的角度）评定的适用范围为大于或等于评定试件的支管角度
        // (影响管外径因素)

        return sb.toString();
    }

}
